"""
Case Type   : GS_GLOBAL_CONFIG
Case Name   : 向系统表gs_global_config添加一个弱口令,部分测试点合理报错
Create At   : 2022/07/22
Owner       : @zou_jialiang050
Description :
    1.向系统表gs_global_config添加一个弱口令
    2.查询系统表gs_global_config
    3.使用新增弱口令创建用户
    3.清理环境
Expect      :
    1.成功
    2.返回含新增参数
    3.合理报错
    4.成功
History     :
"""

import os
import unittest
from testcase.utils.CommonSH import CommonSH
from testcase.utils.Logger import Logger


class Confirguration(unittest.TestCase):
    def setUp(self):
        self.logger = Logger()
        self.primary_sh = CommonSH('PrimaryDbUser')
        self.user = "u_alter_global_configuration_0002"

    def test_alter_global_configuration(self):
        self.logger.info(f'-----{os.path.basename(__file__)} start-----')
        step = 'step1:向系统表gs_global_config添加一个弱口令 expect:成功'
        self.logger.info(step)
        alter_configuration = self.primary_sh.execut_db_sql(
            f'''create weak password dictionary with values ('Test@123');''')
        self.logger.info(alter_configuration)
        self.assertIn('CREATE WEAK PASSWORD DICTIONARY',
                      alter_configuration, '执行失败' + step)

        step = 'step2:查询系统表gs_global_config expect:返回含新增参数'
        self.logger.info(step)
        select_configuration = self.primary_sh.execut_db_sql(
            f'''select * from gs_global_config;''')
        self.logger.info(select_configuration)
        self.assertIn('weak_password | Test@123', select_configuration,
                      '执行失败' + step)

        step = 'step3:使用新增弱口令创建用户 expect:合理报错'
        self.logger.info(step)
        create_user = self.primary_sh.execut_db_sql(
            f'''drop user if exists {self.user};
            create user {self.user} with password 'Test@123';''')
        self.logger.info(create_user)
        self.assertIn('ERROR:  Password should not be weak password.',
                      create_user, '执行失败' + step)

    def tearDown(self):
        step = 'step4:清理环境 expect:成功'
        self.logger.info(step)
        clean_environment = self.primary_sh.execut_db_sql(
            f'''drop weak password dictionary;''')
        self.logger.info(clean_environment)
        self.assertIn('DROP WEAK PASSWORD DICTIONARY', clean_environment,
                      '执行失败' + step)
        self.logger.info(f'-----{os.path.basename(__file__)} end-----')
